Оптимизация препроцессинга и постпроцессинга нейросети Yolov5 с помощью CUDA, Thrust и Nvidia Perfomance primitives

КДПВ

Небольшая предыстория. У нас в компании мы решили сделать коробочный проект по распознаванию номеров (для открытия шлагбаумов, учёта проезжающих машин и т.д. и т.п.). В качестве основы взяли одноплатный Jetson Nano.

В качестве эксперимента перенесли распознавание номеров, написанное на Python и работающее в облаке, на Jetson Nano. Результаты были неудовлетворительные — почти полная загрузка CPU по причине того, что использующийся для препроцессинга OpenCV работал на CPU и постпроцессинг модели Yolo также был на CPU.

К отрицательным моментам можно также отнести:

  • Декодинг на CPU вместо аппаратного декодера, имеющегося у Jetson Nano

  • Постоянно перекопирующуюся информацию из памяти GPU в память CPU (Хотя Jetson Nano делит обычную оперативную память между GPU и CPU).

  • Ожидание GPU — 128 CUDA ядер просто сидели без дела пока 4 ARM ядра CPU были нагружены под завязку.

Решено было всё это переписывать на C++ и по возможности писать

Читать далее